// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  // 获取用户openid
  const wxContext = cloud.getWXContext()
  const userId = wxContext.OPENID
  const couponId = event.couponId

  try {
    // 查询该优惠券是否存在且有效
    const couponResult = await db.collection('coupons').doc(couponId).get()
    const coupon = couponResult.data

    if (!coupon) {
      return {
        success: false,
        message: '优惠券不存在'
      }
    }

    if (coupon.status !== 'active') {
      return {
        success: false,
        message: '优惠券已失效'
      }
    }

    // 检查是否还有剩余数量
    if (coupon.usedCount >= coupon.totalCount) {
      return {
        success: false,
        message: '优惠券已被领完'
      }
    }

    // 检查用户是否已经领取过该优惠券
    const userCouponResult = await db.collection('userCoupons')
      .where({
        userId,
        couponId
      })
      .count()

    if (userCouponResult.total >= coupon.limit) {
      return {
        success: false,
        message: `每人最多可领取${coupon.limit}张`
      }
    }

    // 事务操作：添加用户优惠券记录 + 更新优惠券已领取数量
    const transaction = await db.startTransaction()

    // 添加用户优惠券记录
    await transaction.collection('userCoupons').add({
      data: {
        userId,
        couponId,
        status: 'unused', // 未使用状态
        claimedAt: db.serverDate(),
        usedAt: null,
        orderId: null
      }
    })

    // 更新优惠券已领取数量
    await transaction.collection('coupons').doc(couponId).update({
      data: {
        usedCount: db.command.inc(1)
      }
    })

    // 提交事务
    await transaction.commit()

    return {
      success: true,
      message: '领取成功'
    }
  } catch (error) {
    console.error(error)
    return {
      success: false,
      message: error.message
    }
  }
} 